package com.zut.chat.entity;

import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * 用户实体类
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("chat_user")
public class User {
    
    @Id(keyType = KeyType.Auto)
    private Long id;
    
    /**
     * 用户昵称
     */
    private String nickname;
    
    /**
     * 会话ID
     */
    private String sessionId;
    
    /**
     * 是否在线
     */
    private Boolean online;
    
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
    
    /**
     * 最后活跃时间
     */
    private LocalDateTime lastActiveTime;
    
    /**
     * 用户类型
     */
    private UserType userType;
    
    /**
     * 是否被禁言
     */
    private Boolean banned;
    
    /**
     * 禁言原因
     */
    private String banReason;
    
    /**
     * 禁言到期时间，null表示永久禁言
     */
    private LocalDateTime banExpireTime;
    
    /**
     * 用户类型枚举
     */
    public enum UserType {
        /**
         * 普通用户
         */
        NORMAL,
        
        /**
         * 管理员
         */
        ADMIN
    }
    
    /**
     * 检查用户是否被禁言（避免与Lombok生成的getter冲突，使用不同的方法名）
     */
    public boolean isCurrentlyBanned() {
        if (banned == null || !banned) {
            return false;
        }
        
        // 如果有到期时间且已过期，则不再禁言
        if (banExpireTime != null && banExpireTime.isBefore(LocalDateTime.now())) {
            return false;
        }
        
        return true;
    }
}
